
// Boost Includes ==============================================================
#include <boost/python.hpp>
#include <boost/cstdint.hpp>

// Includes ====================================================================
#include <OpenSG/OSGGeometry.h>
#include <OpenSG/OSGGeometryBase.h>
#include <OsgPtrHelpers.h>

// Using =======================================================================
using namespace boost::python;

// Declarations ================================================================
namespace  {

BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(osg_Geometry_dump_overloads_0_2, dump, 0, 2)


}// namespace


// Module ======================================================================
void Export_src_pyste_gen_Geometry()
{
    scope* osg_GeometryBase_scope = new scope(
    class_< osg::GeometryBase, bases< osg::MaterialDrawable > , boost::noncopyable >("GeometryBase", no_init)
//        .def_readonly("TypesFieldMask", &osg::GeometryBase::TypesFieldMask)
//        .def_readonly("LengthsFieldMask", &osg::GeometryBase::LengthsFieldMask)
//        .def_readonly("PositionsFieldMask", &osg::GeometryBase::PositionsFieldMask)
//        .def_readonly("NormalsFieldMask", &osg::GeometryBase::NormalsFieldMask)
//        .def_readonly("ColorsFieldMask", &osg::GeometryBase::ColorsFieldMask)
//        .def_readonly("SecondaryColorsFieldMask", &osg::GeometryBase::SecondaryColorsFieldMask)
//        .def_readonly("TexCoordsFieldMask", &osg::GeometryBase::TexCoordsFieldMask)
//        .def_readonly("TexCoords1FieldMask", &osg::GeometryBase::TexCoords1FieldMask)
//        .def_readonly("TexCoords2FieldMask", &osg::GeometryBase::TexCoords2FieldMask)
//        .def_readonly("TexCoords3FieldMask", &osg::GeometryBase::TexCoords3FieldMask)
//        .def_readonly("IndicesFieldMask", &osg::GeometryBase::IndicesFieldMask)
//        .def_readonly("IndexMappingFieldMask", &osg::GeometryBase::IndexMappingFieldMask)
//        .def_readonly("DlistCacheFieldMask", &osg::GeometryBase::DlistCacheFieldMask)
//        .def_readonly("GLIdFieldMask", &osg::GeometryBase::GLIdFieldMask)
//        .def_readonly("IgnoreGLForAspectFieldMask", &osg::GeometryBase::IgnoreGLForAspectFieldMask)
//        .def_readonly("MTInfluenceMask", &osg::GeometryBase::MTInfluenceMask)
        .def("getClassType", &osg::GeometryBase::getClassType, return_internal_reference< 1 >())
        .def("getClassTypeId", &osg::GeometryBase::getClassTypeId)
        .def("getType", (osg::FieldContainerType& (osg::GeometryBase::*)() )&osg::GeometryBase::getType, return_internal_reference< 1 >())
        .def("getType", (const osg::FieldContainerType& (osg::GeometryBase::*)() const)&osg::GeometryBase::getType, return_internal_reference< 1 >())
        .def("getContainerSize", &osg::GeometryBase::getContainerSize)
        //.def("getTypes", (osg::GeoPTypesPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getTypes, return_value_policy< copy_const_reference >())
        .def("getTypes", (const osg::GeoPTypesPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getTypes, return_value_policy< copy_const_reference >())
        //.def("getLengths", (osg::GeoPLengthsPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getLengths, return_value_policy< copy_const_reference >())
        .def("getLengths", (const osg::GeoPLengthsPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getLengths, return_value_policy< copy_const_reference >())
        //.def("getPositions", (osg::GeoPositionsPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getPositions, return_value_policy< copy_const_reference >())
        .def("getPositions", (const osg::GeoPositionsPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getPositions, return_value_policy< copy_const_reference >())
        //.def("getNormals", (osg::GeoNormalsPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getNormals, return_value_policy< copy_const_reference >())
        .def("getNormals", (const osg::GeoNormalsPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getNormals, return_value_policy< copy_const_reference >())
        //.def("getColors", (osg::GeoColorsPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getColors, return_value_policy< copy_const_reference >())
        .def("getColors", (const osg::GeoColorsPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getColors, return_value_policy< copy_const_reference >())
        //.def("getSecondaryColors", (osg::GeoColorsPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getSecondaryColors, return_value_policy< copy_const_reference >())
        .def("getSecondaryColors", (const osg::GeoColorsPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getSecondaryColors, return_value_policy< copy_const_reference >())
        //.def("getTexCoords", (osg::GeoTexCoordsPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getTexCoords, return_value_policy< copy_const_reference >())
        .def("getTexCoords", (const osg::GeoTexCoordsPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getTexCoords, return_value_policy< copy_const_reference >())
        //.def("getTexCoords1", (osg::GeoTexCoordsPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getTexCoords1, return_value_policy< copy_const_reference >())
        .def("getTexCoords1", (const osg::GeoTexCoordsPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getTexCoords1, return_value_policy< copy_const_reference >())
        //.def("getTexCoords2", (osg::GeoTexCoordsPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getTexCoords2, return_value_policy< copy_const_reference >())
        .def("getTexCoords2", (const osg::GeoTexCoordsPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getTexCoords2, return_value_policy< copy_const_reference >())
        //.def("getTexCoords3", (osg::GeoTexCoordsPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getTexCoords3, return_value_policy< copy_const_reference >())
        .def("getTexCoords3", (const osg::GeoTexCoordsPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getTexCoords3, return_value_policy< copy_const_reference >())
        //.def("getIndices", (osg::GeoIndicesPtr& (osg::GeometryBase::*)() )&osg::GeometryBase::getIndices, return_value_policy< copy_const_reference >())
        .def("getIndices", (const osg::GeoIndicesPtr& (osg::GeometryBase::*)() const)&osg::GeometryBase::getIndices, return_value_policy< copy_const_reference >())
        //.def("getDlistCache", (bool& (osg::GeometryBase::*)() )&osg::GeometryBase::getDlistCache, return_value_policy< copy_const_reference >())
        .def("getDlistCache", (const bool& (osg::GeometryBase::*)() const)&osg::GeometryBase::getDlistCache, return_value_policy< copy_const_reference >())
        //.def("getIgnoreGLForAspect", (osg::Int32& (osg::GeometryBase::*)() )&osg::GeometryBase::getIgnoreGLForAspect, return_value_policy< copy_const_reference >())
        .def("getIgnoreGLForAspect", (const osg::Int32& (osg::GeometryBase::*)() const)&osg::GeometryBase::getIgnoreGLForAspect, return_value_policy< copy_const_reference >())
        //.def("getIndexMapping", (osg::UInt16& (osg::GeometryBase::*)(const osg::UInt32) )&osg::GeometryBase::getIndexMapping, return_value_policy< copy_const_reference >())
        //.def("getIndexMapping", (osg::MFUInt16& (osg::GeometryBase::*)() )&osg::GeometryBase::getIndexMapping, return_value_policy< copy_const_reference >())
        .def("getIndexMapping", (const osg::MFUInt16& (osg::GeometryBase::*)() const)&osg::GeometryBase::getIndexMapping, return_value_policy< copy_const_reference >())
        .def("setTypes", &osg::GeometryBase::setTypes)
        .def("setLengths", &osg::GeometryBase::setLengths)
        .def("setPositions", &osg::GeometryBase::setPositions)
        .def("setNormals", &osg::GeometryBase::setNormals)
        .def("setColors", &osg::GeometryBase::setColors)
        .def("setSecondaryColors", &osg::GeometryBase::setSecondaryColors)
        .def("setTexCoords", &osg::GeometryBase::setTexCoords)
        .def("setTexCoords1", &osg::GeometryBase::setTexCoords1)
        .def("setTexCoords2", &osg::GeometryBase::setTexCoords2)
        .def("setTexCoords3", &osg::GeometryBase::setTexCoords3)
        .def("setIndices", &osg::GeometryBase::setIndices)
        .def("setDlistCache", &osg::GeometryBase::setDlistCache)
        .def("setIgnoreGLForAspect", &osg::GeometryBase::setIgnoreGLForAspect)
        .def("getBinSize", &osg::GeometryBase::getBinSize)
        .def("copyToBin", &osg::GeometryBase::copyToBin)
        .def("copyFromBin", &osg::GeometryBase::copyFromBin)
        .def("create", &osg::GeometryBase::create)
        .def("createEmpty", &osg::GeometryBase::createEmpty)
        .def("shallowCopy", &osg::GeometryBase::shallowCopy)
        .staticmethod("getClassType")
        .staticmethod("create")
        .staticmethod("createEmpty")
        .staticmethod("getClassTypeId")
    );

    scope().attr("ColorsFieldId") = (int)osg::GeometryBase::ColorsFieldId;
    scope().attr("NormalsFieldId") = (int)osg::GeometryBase::NormalsFieldId;
    scope().attr("IgnoreGLForAspectFieldId") = (int)osg::GeometryBase::IgnoreGLForAspectFieldId;
    scope().attr("LengthsFieldId") = (int)osg::GeometryBase::LengthsFieldId;
    scope().attr("NextFieldId") = (int)osg::GeometryBase::NextFieldId;
    scope().attr("PositionsFieldId") = (int)osg::GeometryBase::PositionsFieldId;
    scope().attr("SecondaryColorsFieldId") = (int)osg::GeometryBase::SecondaryColorsFieldId;
    scope().attr("TexCoordsFieldId") = (int)osg::GeometryBase::TexCoordsFieldId;
    scope().attr("IndexMappingFieldId") = (int)osg::GeometryBase::IndexMappingFieldId;
    scope().attr("TexCoords1FieldId") = (int)osg::GeometryBase::TexCoords1FieldId;
    scope().attr("GLIdFieldId") = (int)osg::GeometryBase::GLIdFieldId;
    scope().attr("IndicesFieldId") = (int)osg::GeometryBase::IndicesFieldId;
    scope().attr("TexCoords2FieldId") = (int)osg::GeometryBase::TexCoords2FieldId;
    scope().attr("TexCoords3FieldId") = (int)osg::GeometryBase::TexCoords3FieldId;
    scope().attr("DlistCacheFieldId") = (int)osg::GeometryBase::DlistCacheFieldId;
    scope().attr("TypesFieldId") = (int)osg::GeometryBase::TypesFieldId;

    delete osg_GeometryBase_scope;

    class_< osg::Geometry, bases< osg::GeometryBase > , boost::noncopyable, osg::GeometryRefPtr >("Geometry", no_init)
        .def_readonly("MapPosition", &osg::Geometry::MapPosition)
        .def_readonly("MapNormal", &osg::Geometry::MapNormal)
        .def_readonly("MapColor", &osg::Geometry::MapColor)
        .def_readonly("MapSecondaryColor", &osg::Geometry::MapSecondaryColor)
        .def_readonly("MapTexCoords", &osg::Geometry::MapTexCoords)
        .def_readonly("MapTexCoords1", &osg::Geometry::MapTexCoords1)
        .def_readonly("MapTexCoords2", &osg::Geometry::MapTexCoords2)
        .def_readonly("MapTexCoords3", &osg::Geometry::MapTexCoords3)
        .def_readonly("MapEmpty", &osg::Geometry::MapEmpty)
        .def("getClassname", &osg::Geometry::getClassname)
        .def("mapType", &osg::Geometry::mapType)
        .def("calcMappingIndex", &osg::Geometry::calcMappingIndex)
        .def("changed", &osg::Geometry::changed)
        .def("getPtr", &osg::Geometry::getPtr)
        .def("clone", &osg::Geometry::clone)
        .def("dump", &osg::Geometry::dump, osg_Geometry_dump_overloads_0_2())
        .def("isMergeable", &osg::Geometry::isMergeable)
        .def("merge", &osg::Geometry::merge)
//        .def("getProperty", &osg::Geometry::getProperty, return_value_policy< copy_const_reference >())
        .def("setTypes", &osg::Geometry::setTypes)
        .def("setLengths", &osg::Geometry::setLengths)
        .def("setPositions", &osg::Geometry::setPositions)
        .def("setNormals", &osg::Geometry::setNormals)
        .def("setColors", &osg::Geometry::setColors)
        .def("setSecondaryColors", &osg::Geometry::setSecondaryColors)
        .def("setTexCoords", &osg::Geometry::setTexCoords)
        .def("setTexCoords1", &osg::Geometry::setTexCoords1)
        .def("setTexCoords2", &osg::Geometry::setTexCoords2)
        .def("setTexCoords3", &osg::Geometry::setTexCoords3)
        .def("setIndices", &osg::Geometry::setIndices)
        .def("setMaterial", &osg::Geometry::setMaterial)
//        .def("beginTriangles", &osg::Geometry::beginTriangles)
//        .def("endTriangles", &osg::Geometry::endTriangles)
//        .def("beginPrimitives", &osg::Geometry::beginPrimitives)
//        .def("endPrimitives", &osg::Geometry::endPrimitives)
//        .def("beginFaces", &osg::Geometry::beginFaces)
//        .def("endFaces", &osg::Geometry::endFaces)
//        .def("beginLines", &osg::Geometry::beginLines)
//        .def("endLines", &osg::Geometry::endLines)
//        .def("beginEdges", &osg::Geometry::beginEdges)
//        .def("endEdges", &osg::Geometry::endEdges)
//        .def("drawPrimitives", &osg::Geometry::drawPrimitives)
        .def("intersect", (osg::Action::ResultE (osg::Geometry::*)(osg::Action*) )&osg::Geometry::intersect)
        .def("intersect", (osg::NewActionTypes::ResultE (osg::Geometry::*)(osg::NewActionTypes::FunctorArgumentType&) )&osg::Geometry::intersect)
        .def("invalidateDlistCache", &osg::Geometry::invalidateDlistCache)
        .def("adjustVolume", &osg::Geometry::adjustVolume)
        .staticmethod("getClassname")
        .staticmethod("mapType")
    ;


    register_ptr_to_python<osg::GeometryPtr>();
    implicitly_convertible<osg::GeometryRefPtr, osg::GeometryPtr>();
    implicitly_convertible<osg::GeometryPtr, osg::MaterialDrawablePtr>();

    def("RefPtr", &pyopensg::ToRefPtr<osg::GeometryPtr>);
    def("FCPtr", &pyopensg::ToFcPtr<osg::GeometryPtr>);
}

